/* 
 * File:   Indice.h
 * Author: jesus
 *
 * Created on 11 de junio de 2010, 22:14
 */
#include <iostream>
#include <map>
#include "Fichero.h"
using namespace std;

#ifndef _INDICE_H
#define	_INDICE_H

class ErrorElementoRepetido{};
class ErrorElementoNoEncontrado{};
template<class ClaveP>
class Indice {
    map<ClaveP,long int> ind;
    Fichero <ClaveP> f;
public:
    Indice();
    Indice(const Indice& orig);
    void cargarIndice(string fichIndiceDatos);
    void salvarIndice(string fichIndiceDatos);
    void insertarElementoIndice(ClaveP clave,long pos);
    long int eliminar(ClaveP clave);
    long int  buscar(ClaveP clave);
    ~Indice();


};
template<class ClaveP>
Indice<ClaveP>::Indice() {
    
}

template<class ClaveP>
Indice<ClaveP>::Indice(const Indice<ClaveP> & orig) {

}
template<class ClaveP>
Indice<ClaveP>::~Indice() {
}
template<class ClaveP>
void Indice<ClaveP>::cargarIndice(string fichIndiceDatos){

}
template<class ClaveP>
void Indice<ClaveP>::salvarIndice(string fDatos){
    map<ClaveP,long int>::iterator it;
    Fichero<ClaveP> fich(fDatos);

    for(it=ind.begin();it!=ind.end();it++){
        fich.insertarElementoFinal(it);
    }

}
template<class ClaveP>
void Indice<ClaveP>::insertarElementoIndice(ClaveP clave,long pos){

    //long pos=f.insertarElementoFinal(clave);
    
    pair<ClaveP,int long> nuevElemento;
    nuevElemento.first=clave;
    nuevElemento.second=pos;

    pair<map<ClaveP,long>::iterator,bool> retResult;
    retResult=ind.insert(clave);
    if(retResult.second==false)
        throw ErrorElementoRepetido();

}

template<class ClaveP>
long int Indice<ClaveP>::eliminar(ClaveP clave){
    long int retPos;
    map<ClaveP,long>::iterator it;
    it=ind.find(clave);
    
    if(it==ind.end())
        throw ErrorElementoNoEncontrado();
    else{
        retPos=it->second;
        ind.erase(it);
    
    }
    return retPos;
}

template<class ClaveP>
long int  Indice<ClaveP>::buscar(ClaveP clave){
}

#endif	/* _INDICE_H */

